package com.kinyx.framework.db.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注释
 * <pre>
 * Hibernate 5.6.0.Final以后提供了&#64;org.hibernate.annotations.Comment(value="")，因此，本框架暂时兼容该用法，未来将取消自定义注解对列注释的使用。
 * 兼容性已经完全实现，但仍需保留此注解，因Hibernate提供的功能目前未知仍然并不理想。（兼容性测试到5.6.8.Final）
 * 在Hibernate的表注释用法中，是使用@org.hibernate.annotations.Table(appliesTo = "xxx", comment = "表注释")方法，
 * 因为appliesTo是必填项，且必将对应实体表，那么使用此方法就等同于写死表名，同时你还需要在其他标记表名的注解中都做同样设定。
 * 例如：
 * 	&#64;javax.persistence.Entity(name="xxx")
 * 	&#64;javax.persistence.Table(name="xxx")
 * 	&#64;org.hibernate.annotations.Table(appliesTo = "xxx", comment = "表注释")
 * 	public class DemoEntity {}
 * 这显然是一个很糟糕的用法，对表名的命名策略的功能将完全失去了价值，因此这个自定义注解的意义就在于此。
 * 例如：
 * 	&#64;javax.persistence.Entity
 * 	&#64;com.kinyx.framework.db.annotation.Comment("表注释")
 * 	public class DemoEntity {}
 * 为了增加注释，就专门增加注释，表名完全交由命名策略实现。
 * 当然，如果你希望使用org.hibernate.annotations.Table注解中的其它功能，上面提到的问题仍然无法避免。
 * </pre>
 */
@Target({
		ElementType.TYPE, ElementType.FIELD
})
@Retention(RetentionPolicy.RUNTIME)
public @interface Comment { String value(); }
